package com.example.security.common;

import lombok.Data;
import lombok.experimental.Accessors;

/**
 * 通用返回结果
 * 统一API响应格式
 */
@Data
@Accessors(chain = true)
public class Result<T> {
    /**
     * 状态码
     * 200: 成功
     * 500: 失败
     * 401: 未认证
     * 403: 无权限
     */
    private Integer code;

    /**
     * 返回消息
     * 成功或错误提示信息
     */
    private String message;

    /**
     * 返回数据
     * 业务数据对象
     */
    private T data;
    /**
     * 返回成功结果
     */
    public static  Result<Void> ok() {
        return new Result<Void>()
            .setCode(200)
            .setMessage("操作成功");
    }

    /**
     * 返回成功结果
     */
    public static <T> Result<T> ok(T data) {
        return new Result<T>()
            .setCode(200)
            .setMessage("操作成功")
            .setData(data);
    }
    /**
     * 返回成功信息
     *
     */
    public static <T> Result<T> ok(String message, T data) {
        return new Result<T>()
            .setCode(200)
            .setMessage(message)
                .setData(data);
    }
    /**
     * 返回失败结果
     */
    public static <T> Result<T> fail() {
        return new Result<T>()
            .setCode(500)
            .setMessage("操作失败");
    }


    /**
     * 返回失败结果
     */
    public static Result<Void> fail(String message) {
        return new Result<Void>()
            .setCode(500)
            .setMessage(message);
    }

    public static Result fail(int code,String message) {
        Result result = new Result<>();
        result.setCode(code);
        result.setMessage(message);
        return result;
    }
}